#!/bin/sh
# Begin /etc/init.d/modules

### BEGIN INIT INFO
# Provides:            modules
# Required-Start:      mountkernfs sysctl
# Should-Start:
# Required-Stop:
# Should-Stop:
# Default-Start:       S
# Default-Stop:
# Short-Description:   Loads required modules.
# Description:         Loads modules listed in /etc/sysconfig/modules.
# X-LFS-Default-Start: S10
# X-LFS-Default-Stop:
# X-LFS-Provided-By:   LFS
### END INIT INFO

. /lib/lsb/init-functions

# Assure that the kernel has module support.
[ -e /proc/ksyms -o -e /proc/modules ] || exit 0

case "${1}" in
    start)

        # Exit if there's no modules file or there are no
        # valid entries
        [ -r /etc/sysconfig/modules ] &&
            egrep -qv '^($|#)' /etc/sysconfig/modules ||
            exit 0

        # If proc is mounted, find the current kernel
        # message level 
        if [ -f /proc/sys/kernel/printk ]; then
            prev_msg=`cat /proc/sys/kernel/printk | \
                sed 'l 1' | sed -n '2~0p' | \
                sed 's/\\\//'`
        else 
            prev_msg="6"
        fi

        # Now set the message level to 1 so not to make too 
        # much noise when loading modules
        dmesg -n 1

        # Only try to load modules if the user has actually given us
        # some modules to load.
        if egrep -qv '^(#|$)' /etc/sysconfig/modules 2>/dev/null
        then

            # Read in the configuration file.
            exec 9>&0 < /etc/sysconfig/modules

                message="${INFO}Loading modules:"

                while read module args
                do
                    # Ignore comments and blank lines.
                    case "${module}" in
                        ""|\#*) continue ;;
                    esac

                    # Attempt to load the module, making
                    # sure to pass any arguments provided.
                    modprobe ${module} ${args} > /dev/null

                    # Print the module name if successful,
                    # otherwise take note.
                    if [ ${?} -eq 0 ]; then
                        message="${message}${NORMAL} ${module}"
                    else
                        failedmod="${failedmod} ${module}"
                    fi
                done

                # Print a message about successfully loaded
                # modules on the correct line.
                log_success_msg "${message}"

                # Print a failure message with a list of any
                # modules that may have failed to load.
                if [ "${failedmod}" ]; then
                    log_failure_msg "${FAILURE}Failed to load modules:${failedmod}"
                fi

            exec 0>&9 9>&-

        fi
        # Set the kernel message level back to it's previous value.
        dmesg -n "${prev_msg}"
        ;;
    *)
        echo "Usage: ${0} {start}"
        exit 1
        ;;
esac

# End /etc/init.d/modules
